package src.main.java.org.execise;

import java.util.*;

/*
* 集合的灵活应用
* 目前有100名囚犯，每个囚犯的编号是1-200之间的随机数，现在要求依次随机生成100名囚犯的编号（要求这些囚犯的编号是不能重复的），然后
* 让他们依次站成一排，位置是从1开始计数。接下来，国王命令手下先干掉全部奇数位置的人，剩下的人，又重新按照位置1开始，再次干掉全部奇数位置的人
* 依此类推，直到最后剩下一个人为止，剩下的这个人为幸存者。
* */
public class Test1 {
    public static List<People> people = new ArrayList<>();
    public static void main(String[] args) {
        Random random = new Random();

        for (int i = 1; i <= 100; i++) {
            while(true){
                int code = random.nextInt(200)+1;  //生成随机数
                boolean exist = exist(code); //判断此编号是否存在
                if(exist){
                    People people1 = new People(code,i);
                    people.add(people1);
                    break;//代表当前囚犯添加成功
                }
            }
        }
        System.out.println(people);
        while (people.size()>1){
            List<People> tempPeople = new ArrayList<>();
            for (int i = 1; i < people.size(); i+=2) { //转换思想，将偶数位置的人留下
                People people1 = people.get(i);
                tempPeople.add(people1);
            }
            people = tempPeople;
        }
        People luckPeople = people.get(0);
        System.out.println(luckPeople);

    }
    public static boolean exist(int code){
        for (People person : people) {
            if(person.getCode() == code){
                return false;
            }
        }
        return true;
    }
}
